home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / MRAC / Notations / ample
Lisp/Scheme  |  1998-10-27  |  9KB  |  279 lines

  1. ample type pattern 
  2.  
  3. This function takes as its name the AMPLE computer music composition language developed by Chris Jordan in the early 1980s for the BBC computer. The basic language protocol for AMPLE provided an efficient representation of pitch, note-length and duration within a single stream of code. Thus it comes close to representating traditional stave notation. 
  4.  
  5. The SCOM function ample provides a close equivalent of this representation which may provide a valuable scoring tool in certain situations, most particularly when working in chromatic tonalities where the pitch range within a part is extensive. 
  6.  
  7. The function makes use of the following parameters: 
  8.  
  9. note paramete:  symbol (a b c d ..) or pitch (c4 c#4 d4 ...)
  10. rest parameter:  =
  11. length parameter:  ratio (1/8) ; only positive ratios
  12. length expand :  /
  13. chords :   symbols abc, pitches c4_c#4_d4
  14. repeat:   [ ] 
  15.  
  16. In the example below using symbols notice that one first creates a list containing the note-length instruction prefacing a sequence of symbols. This means all the symbols following the note-length element will be played in that note-length. In addition to symbols and rest-symbols there is a 'new' SCOM symbol meaning a length expansion, thus: (1/8 a / / b) will mean a sounding for 3/8 followed by b sounding for an 1/8. The composer then extracts lengths from symbols via the ample function, usually in the def-symbol / def-length section of the score-file. 
  17.  
  18. (setq pat1
  19.       '(1/8 a / / b c d / = 1/12 a -b c d / = 1/4 g / h / b m))
  20.  
  21. (ample :length pat1)
  22. => (3/8 1/8 1/8 1/4 -1/8 1/12 1/12 1/12 1/6 -1/12 1/2 1/2 1/4 1/4)
  23.  
  24. (ample :symbol pat1)
  25. => (a b c d a -b c d g h b m)
  26.  
  27. In this further example notice how note-lists (with a corresponding tonality (chromatic c 5) may be used in place of symbols. The first list of shown below incorporates another symbol new to SCOM, the repeat sign [ . .]. 
  28.  
  29. (setq pat2
  30.       '(([ 1/8 a4 / / a4 d#4 a4 / / ]) (1/12 = a4 d#5 f#5 a5 / 1/4 a&4)))
  31.  
  32. (ample :length pat2)
  33. => ((3/8 1/8 1/8 3/8 3/8 1/8 1/8 3/8) (-1/12 1/12 1/12 1/12 1/6 1/4))
  34.  
  35. (ample :symbol pat2)
  36. => ((j j d j j j d j) (j p s v i))
  37.  
  38. The following example shows how chords may be notated; in both symbol and pitch forms. 
  39.  
  40. (setq pat3 '(1/8 a b / / hnb 1/4 f / / 1/2 j k 1/8 a =))
  41.  
  42. (ample :symbol pat3)
  43. => (a b hnb f j k a)
  44.  
  45. (ample :length pat3)
  46. => (1/8 3/8 1/8 3/4 1/2 1/2 1/8 -1/8)
  47.  
  48. (setq pat4
  49.       '(1/8 c4 c#4 / / g4_c#5_d&4 1/4 f4 / / 1/2 a4 b&4 1/8 c4 =))
  50.  
  51. (ample :symbol pat4)
  52. => (a b hnb f j k a)
  53.  
  54. (ample :length pat4)
  55. => (1/8 3/8 1/8 3/4 1/2 1/2 1/8 -1/8)
  56.  
  57. ;;; -----------------------------------------------------------------------------
  58. ;;; J.S.Bach Wohltemperierters Klavier, Erste Teil, Praeludium I.
  59. ;;; -----------------------------------------------------------------------------
  60.  
  61. (setq rh
  62.       '(([ 1/8 = 1/16 g4 c5 e5 g4 c5 e5 ])
  63.         ([ 1/8 = 1/16 a4 d5 f5 a4 d5 f5 ])
  64.         ([ 1/8 = 1/16 g4 d5 f5 g4 d5 f5 ])
  65.         ([ 1/8 = 1/16 g4 c5 e5 g4 c5 e5 ])
  66.         ([ 1/8 = 1/16 a4 e5 a5 a4 e5 a5 ])     ;  5
  67.         ([ 1/8 = 1/16 f#4 a4 d5 f#4 a4 d5 ])
  68.         ([ 1/8 = 1/16 g4 d5 g5 g4 d5 g5 ])
  69.         ([ 1/8 = 1/16 e4 g4 c5 e4 g4 c5 ])
  70.         ([ 1/8 = 1/16 e4 g4 c5 e4 g4 c5 ])
  71.         ([ 1/8 = 1/16 d4 f#4 c5 d4 f#4 c5 ])   ; 10
  72.         ([ 1/8 = 1/16 d4 g4 b4 d4 g4 b4 ])
  73.         ([ 1/8 = 1/16 e4 g4 c#5 e4 g4 c#5 ])
  74.         ([ 1/8 = 1/16 d4 a4 d5 d4 a4 d5 ])
  75.         ([ 1/8 = 1/16 d4 f4 b4 d4 f4 b4 ])
  76.         ([ 1/8 = 1/16 c4 g4 c5 c4 g4 c5 ])     ; 15
  77.         ([ 1/8 = 1/16 a3 c4 f4 a3 c4 f4 ])
  78.         ([ 1/8 = 1/16 a3 c4 f4 a3 c4 f4 ])
  79.         ([ 1/8 = 1/16 g3 b3 f4 g3 b3 f4 ])
  80.         ([ 1/8 = 1/16 g3 c4 e4 g3 c4 e4 ])
  81.         ([ 1/8 = 1/16 b&3 c4 e4 b&3 c4 e4 ])   ; 20
  82.         ([ 1/8 = 1/16 a3 c4 e4 a3 c4 e4 ])
  83.         ([ 1/8 = 1/16 a3 c4 e&4 a3 c4 e&4 ])
  84.         ([ 1/8 = 1/16 b3 c4 d4 b3 c4 d4 ])
  85.         ([ 1/8 = 1/16 g3 b3 d4 g3 b3 d4 ])
  86.         ([ 1/8 = 1/16 g3 c4 e4 g3 c4 e4 ])     ; 25
  87.         ([ 1/8 = 1/16 g3 c4 f4 g3 c4 f4 ])
  88.         ([ 1/8 = 1/16 g3 b3 f4 g3 b3 f4 ])
  89.         ([ 1/8 = 1/16 a3 c4 f#4 a3 c4 f#4 ])
  90.         ([ 1/8 = 1/16 g3 c4 g4 g3 c4 g4 ])
  91.         ([ 1/8 = 1/16 g3 c4 f4 g3 c4 f4 ])     ; 30
  92.         ([ 1/8 = 1/16 g3 b3 f4 g3 b3 f4 ])
  93.         ([ 1/8 = 1/16 g3 b&3 e4 g3 b&3 e4 ])
  94.         (1/8 = 1/16 f3 a3 c4 f4 c4 a3 c4 a3 f3 a3 f3 d3 f3 d3)
  95.         (1/8 = 1/16 g4 b4 d5 f5 d5 b4 d5 b4 g4 b4 d4 f4 e4 d4)
  96.         (1/1 e4_g4_c5))   ; 35
  97.       lh1
  98.       '(([ 1/16 = 7/16 e4 ])
  99.         ([ 1/16 = 7/16 d4 ])
  100.         ([ 1/16 = 7/16 d4 ])
  101.         ([ 1/16 = 7/16 e4 ])
  102.         ([ 1/16 = 7/16 e4 ])    ;  5
  103.         ([ 1/16 = 7/16 d4 ])
  104.         ([ 1/16 = 7/16 d4 ])
  105.         ([ 1/16 = 7/16 c4 ])
  106.         ([ 1/16 = 7/16 c4 ])
  107.         ([ 1/16 = 7/16 a3 ])    ; 10
  108.         ([ 1/16 = 7/16 b3 ])
  109.         ([ 1/16 = 7/16 b&3 ])
  110.         ([ 1/16 = 7/16 a3 ])
  111.         ([ 1/16 = 7/16 a&3 ])
  112.         ([ 1/16 = 7/16 g3 ])    ; 15
  113.         ([ 1/16 = 7/16 f3 ])
  114.         ([ 1/16 = 7/16 f3 ])
  115.         ([ 1/16 = 7/16 d3 ])
  116.         ([ 1/16 = 7/16 e3 ])
  117.         ([ 1/16 = 7/16 g3 ])    ; 20
  118.         ([ 1/16 = 7/16 f3 ])
  119.         ([ 1/16 = 7/16 c3 ])
  120.         ([ 1/16 = 7/16 f3 ])
  121.         ([ 1/16 = 7/16 f3 ])
  122.         ([ 1/16 = 7/16 e3 ])    ; 25
  123.         ([ 1/16 = 7/16 d3 ])
  124.         ([ 1/16 = 7/16 d3 ])
  125.         ([ 1/16 = 7/16 e&3 ])
  126.         ([ 1/16 = 7/16 e3 ])
  127.         ([ 1/16 = 7/16 d3 ])    ; 30
  128.         ([ 1/16 = 7/16 d3 ])
  129.         ([ 1/16 = 7/16 c3 ])
  130.         (1/16 = 15/16 c3)
  131.         (1/16 = 15/16 b2)
  132.         (1/1 c3))               ; 35
  133.       lh2
  134.       '((1/2 c4 c4)
  135.         (1/2 c4 c4)
  136.         (1/2 b3 b3)
  137.         (1/2 c4 c4)
  138.         (1/2 c4 c4)     ;  5
  139.         (1/2 c4 c4)
  140.         (1/2 b3 b3)
  141.         (1/2 b3 b3)
  142.         (1/2 a3 a3)
  143.         (1/2 d3 d3)     ; 10
  144.         (1/2 g3 g3)
  145.         (1/2 g3 g3)
  146.         (1/2 f3 f3)
  147.         (1/2 f3 f3)
  148.         (1/2 e3 e3)     ; 15
  149.         (1/2 e3 e3)
  150.         (1/2 d3 d3)
  151.         (1/2 g2 g2)
  152.         (1/2 c3 c3)
  153.         (1/2 c3 c3)     ; 20
  154.         (1/2 f2 f2)
  155.         (1/2 f#2 f#2)
  156.         (1/2 a&2 a&2)
  157.         (1/2 g2 g2)
  158.         (1/2 g2 g2)     ; 25
  159.         (1/2 g2 g2)
  160.         (1/2 g2 g2)
  161.         (1/2 g2 g2)
  162.         (1/2 g2 g2)
  163.         (1/2 g2 g2)     ; 30
  164.         (1/2 g2 g2)
  165.         (1/2 c2 c2)
  166.         (1/1 c2)
  167.         (1/1 c2)
  168.         (1/1 c2)))      ; 35
  169.  
  170. (setq
  171.  velocity-lh
  172.  (append
  173.   (mapcar #'(lambda (x y)
  174.               (symbol-transpose x y)) (gen-cresc-dim 0 6 11)
  175.           (gen-repeat 11 (list (gen-repeat 4 '(48 47 52)))))
  176.   (mapcar #'(lambda (x y)
  177.               (symbol-transpose x y)) (gen-dim 0 -8 4)
  178.           (gen-repeat 4 (list (gen-repeat 4 '(48 47 52)))))
  179.   (mapcar #'(lambda (x y)
  180.               (symbol-transpose x y)) (gen-dim 0 -12 9)
  181.           (gen-repeat 9 (list (gen-repeat 4 '(46 46 49)))))
  182.   (mapcar #'(lambda (x y)
  183.               (symbol-transpose x y)) (gen-cresc 0 23 5)
  184.           (gen-repeat 5 (list (gen-repeat 4 '(42 42 44)))))
  185.   (mapcar #'(lambda (x y)
  186.               (symbol-transpose x y)) (gen-dim 25 0 3)
  187.           (gen-repeat 3 (list (gen-repeat 4 '(43 43 44)))))
  188.   (gen-repeat 2  (list (gen-repeat 4 '(44 44 44))))
  189.   '((48)))
  190.  
  191.  velocity-rh1
  192.  (mapcar 'list
  193.          (append
  194.           (gen-cresc-dim 54 60 15)
  195.           (gen-dim 54 44 9)
  196.           (gen-cresc 54 74 5)
  197.           (gen-dim 71 44 5)
  198.           '(48)))
  199.  
  200.  velocity-rh2
  201.  (mapcar 'list
  202.          (append
  203.           (gen-cresc-dim 52 58 15)
  204.           (gen-dim 52 45 9)
  205.           (gen-cresc 54 74 5)
  206.           (gen-dim 69 44 5)
  207.           '(48))))
  208.  
  209. (setq
  210.  tempo-value
  211.  (flatten
  212.   (list
  213.    (gen-repeat 15 '(61))
  214.    (gen-repeat 15 '(60))
  215.    (gen-repeat 2 '(58))
  216.    (gen-repeat 1 '(56))
  217.    (gen-repeat 12 '(55))
  218.    (gen-dim 45 20 4)
  219.    '50))
  220.  
  221.  tempo
  222.  (flatten
  223.   (list
  224.    (gen-repeat 33 '(1/1))
  225.    (gen-repeat 16 '(1/16))
  226.    '1/1)))
  227.  
  228.  
  229. (def-symbol
  230.   rhand (ample :symbol rh)
  231.   lhand1 (ample :symbol lh1)
  232.   lhand2 (ample :symbol lh2))
  233.  
  234. (def-length
  235.   rhand (ample :length rh)
  236.   lhand1 (ample :length lh1)
  237.   lhand2 (ample :length lh2))
  238.  
  239. (def-velocity
  240.   rhand velocity-lh
  241.   lhand1 velocity-rh1
  242.   lhand2 velocity-rh2)
  243.  
  244. (def-duration
  245.   rhand (append
  246.          (p-replace-section
  247.           nil '(3 6 10 13) '1/128
  248.           (gen-repeat 4 (g-integer 1 15))
  249.           (subseq (length-of rhand) 0 15))
  250.          (p-replace-section
  251.           nil '(3 6 10 13) '1/64
  252.           (gen-repeat 4 (g-integer 1 14))
  253.           (subseq (length-of rhand) 15 29))
  254.          (subseq (length-of rhand) 29 35))
  255.   lhand1 (length-of lhand1)
  256.   lhand2 (length-of lhand2))
  257.  
  258. (def-zone
  259.   tempo tempo
  260.   default (zone-tick (length-of rhand)))
  261.  
  262. (def-channel
  263.   default k2000i-1)
  264.  
  265. (def-program k2000p
  266.   default stereo-grand)
  267.  
  268. (def-tonality
  269.   default (activate-tonality (chromatic c 5)))
  270.  
  271. (def-tempo tempo-value)
  272.  
  273. (compile-instrument "ccl;output:" "JSB_WK_I_P1"
  274.  rhand lhand1 lhand2)
  275.  
  276. ;;; -----------------------------------------------------------------------------
  277. ;;; jp96
  278. ;;; -----------------------------------------------------------------------------
  279.